home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / include / linux / scc.h < prev    next >
C/C++ Source or Header  |  2005-10-13  |  7KB  |  254 lines

  1. /* $Id: scc.h,v 1.29 1997/04/02 14:56:45 jreuter Exp jreuter $ */
  2.  
  3. #ifndef    _SCC_H
  4. #define    _SCC_H
  5.  
  6. #include <linux/config.h>
  7.  
  8. /* selection of hardware types */
  9.  
  10. #define PA0HZP        0x00    /* hardware type for PA0HZP SCC card and compatible */
  11. #define EAGLE        0x01    /* hardware type for EAGLE card */
  12. #define PC100        0x02    /* hardware type for PC100 card */
  13. #define PRIMUS        0x04    /* hardware type for PRIMUS-PC (DG9BL) card */
  14. #define DRSI        0x08    /* hardware type for DRSI PC*Packet card */
  15. #define BAYCOM        0x10    /* hardware type for BayCom (U)SCC */
  16.  
  17. /* DEV ioctl() commands */
  18.  
  19. enum SCC_ioctl_cmds {
  20.     SIOCSCCRESERVED = SIOCDEVPRIVATE,
  21.     SIOCSCCCFG,
  22.     SIOCSCCINI,
  23.     SIOCSCCCHANINI,
  24.     SIOCSCCSMEM,
  25.     SIOCSCCGKISS,
  26.     SIOCSCCSKISS,
  27.     SIOCSCCGSTAT,
  28.     SIOCSCCCAL
  29. };
  30.  
  31. /* Device parameter control (from WAMPES) */
  32.  
  33. enum L1_params {
  34.     PARAM_DATA,
  35.     PARAM_TXDELAY,
  36.     PARAM_PERSIST,
  37.     PARAM_SLOTTIME,
  38.     PARAM_TXTAIL,
  39.     PARAM_FULLDUP,
  40.     PARAM_SOFTDCD,        /* was: PARAM_HW */
  41.     PARAM_MUTE,        /* ??? */
  42.     PARAM_DTR,
  43.     PARAM_RTS,
  44.     PARAM_SPEED,
  45.     PARAM_ENDDELAY,        /* ??? */
  46.     PARAM_GROUP,
  47.     PARAM_IDLE,
  48.     PARAM_MIN,
  49.     PARAM_MAXKEY,
  50.     PARAM_WAIT,
  51.     PARAM_MAXDEFER,
  52.     PARAM_TX,
  53.     PARAM_HWEVENT = 31,
  54.     PARAM_RETURN = 255    /* reset kiss mode */
  55. };
  56.  
  57. /* fulldup parameter */
  58.  
  59. enum FULLDUP_modes {
  60.     KISS_DUPLEX_HALF,    /* normal CSMA operation */
  61.     KISS_DUPLEX_FULL,    /* fullduplex, key down trx after transmission */
  62.     KISS_DUPLEX_LINK,    /* fullduplex, key down trx after 'idletime' sec */
  63.     KISS_DUPLEX_OPTIMA    /* fullduplex, let the protocol layer control the hw */
  64. };
  65.  
  66. /* misc. parameters */
  67.  
  68. #define TIMER_OFF    65535U    /* to switch off timers */
  69. #define NO_SUCH_PARAM    65534U    /* param not implemented */
  70.  
  71. /* HWEVENT parameter */
  72.  
  73. enum HWEVENT_opts {
  74.     HWEV_DCD_ON,
  75.     HWEV_DCD_OFF,
  76.     HWEV_ALL_SENT
  77. };
  78.  
  79. /* channel grouping */
  80.  
  81. #define RXGROUP        0100    /* if set, only tx when all channels clear */
  82. #define TXGROUP        0200    /* if set, don't transmit simultaneously */
  83.  
  84. /* Tx/Rx clock sources */
  85.  
  86. enum CLOCK_sources {
  87.     CLK_DPLL,    /* normal halfduplex operation */
  88.     CLK_EXTERNAL,    /* external clocking (G3RUH/DF9IC modems) */
  89.     CLK_DIVIDER,    /* Rx = DPLL, Tx = divider (fullduplex with */
  90.             /* modems without clock regeneration */
  91.     CLK_BRG        /* experimental fullduplex mode with DPLL/BRG for */
  92.             /* MODEMs without clock recovery */
  93. };
  94.  
  95. /* Tx state */
  96.  
  97. enum TX_state {
  98.     TXS_IDLE,    /* Transmitter off, no data pending */
  99.     TXS_BUSY,    /* waiting for permission to send / tailtime */
  100.     TXS_ACTIVE,    /* Transmitter on, sending data */
  101.     TXS_NEWFRAME,    /* reset CRC and send (next) frame */
  102.     TXS_IDLE2,    /* Transmitter on, no data pending */
  103.     TXS_WAIT,    /* Waiting for Mintime to expire */
  104.     TXS_TIMEOUT    /* We had a transmission timeout */
  105. };
  106.  
  107. typedef unsigned long io_port;    /* type definition for an 'io port address' */
  108.  
  109. /* SCC statistical information */
  110.  
  111. struct scc_stat {
  112.         long rxints;            /* Receiver interrupts */
  113.         long txints;            /* Transmitter interrupts */
  114.         long exints;            /* External/status interrupts */
  115.         long spints;            /* Special receiver interrupts */
  116.  
  117.         long txframes;          /* Packets sent */
  118.         long rxframes;          /* Number of Frames Actually Received */
  119.         long rxerrs;            /* CRC Errors */
  120.         long txerrs;        /* KISS errors */
  121.         
  122.     unsigned int nospace;    /* "Out of buffers" */
  123.     unsigned int rx_over;    /* Receiver Overruns */
  124.     unsigned int tx_under;    /* Transmitter Underruns */
  125.  
  126.     unsigned int tx_state;    /* Transmitter state */
  127.     int tx_queued;        /* tx frames enqueued */
  128.  
  129.     unsigned int maxqueue;    /* allocated tx_buffers */
  130.     unsigned int bufsize;    /* used buffersize */
  131. };
  132.  
  133. struct scc_modem {
  134.     long speed;        /* Line speed, bps */
  135.     char clocksrc;        /* 0 = DPLL, 1 = external, 2 = divider */
  136.     char nrz;        /* NRZ instead of NRZI */    
  137. };
  138.  
  139. struct scc_kiss_cmd {
  140.     int       command;    /* one of the KISS-Commands defined above */
  141.     unsigned param;        /* KISS-Param */
  142. };
  143.  
  144. struct scc_hw_config {
  145.     io_port data_a;        /* data port channel A */
  146.     io_port ctrl_a;        /* control port channel A */
  147.     io_port data_b;        /* data port channel B */
  148.     io_port ctrl_b;        /* control port channel B */
  149.     io_port vector_latch;    /* INTACK-Latch (#) */
  150.     io_port    special;    /* special function port */
  151.  
  152.     int    irq;        /* irq */
  153.     long    clock;        /* clock */
  154.     char    option;        /* command for function port */
  155.  
  156.     char brand;        /* hardware type */
  157.     char escc;        /* use ext. features of a 8580/85180/85280 */
  158. };
  159.  
  160. /* (#) only one INTACK latch allowed. */
  161.  
  162.  
  163. struct scc_mem_config {
  164.     unsigned int dummy;
  165.     unsigned int bufsize;
  166. };
  167.  
  168. struct scc_calibrate {
  169.     unsigned int time;
  170.     unsigned char pattern;
  171. };
  172.  
  173. #ifdef __KERNEL__
  174.  
  175. enum {TX_OFF, TX_ON};    /* command for scc_key_trx() */
  176.  
  177. /* Vector masks in RR2B */
  178.  
  179. #define VECTOR_MASK    0x06
  180. #define TXINT        0x00
  181. #define EXINT        0x02
  182. #define RXINT        0x04
  183. #define SPINT        0x06
  184.  
  185. #ifdef CONFIG_SCC_DELAY
  186. #define Inb(port)    inb_p(port)
  187. #define Outb(port, val)    outb_p(val, port)
  188. #else
  189. #define Inb(port)    inb(port)
  190. #define Outb(port, val)    outb(val, port)
  191. #endif
  192.  
  193. /* SCC channel control structure for KISS */
  194.  
  195. struct scc_kiss {
  196.     unsigned char txdelay;        /* Transmit Delay 10 ms/cnt */
  197.     unsigned char persist;        /* Persistence (0-255) as a % */
  198.     unsigned char slottime;        /* Delay to wait on persistence hit */
  199.     unsigned char tailtime;        /* Delay after last byte written */
  200.     unsigned char fulldup;        /* Full Duplex mode 0=CSMA 1=DUP 2=ALWAYS KEYED */
  201.     unsigned char waittime;        /* Waittime before any transmit attempt */
  202.     unsigned int  maxkeyup;        /* Maximum time to transmit (seconds) */
  203.     unsigned int  mintime;        /* Minimal offtime after MAXKEYUP timeout (seconds) */
  204.     unsigned int  idletime;        /* Maximum idle time in ALWAYS KEYED mode (seconds) */
  205.     unsigned int  maxdefer;        /* Timer for CSMA channel busy limit */
  206.     unsigned char tx_inhibit;    /* Transmit is not allowed when set */    
  207.     unsigned char group;        /* Group ID for AX.25 TX interlocking */
  208.     unsigned char mode;        /* 'normal' or 'hwctrl' mode (unused) */
  209.     unsigned char softdcd;        /* Use DPLL instead of DCD pin for carrier detect */
  210. };
  211.  
  212.  
  213. /* SCC channel structure */
  214.  
  215. struct scc_channel {
  216.     int init;            /* channel exists? */
  217.  
  218.     struct net_device *dev;        /* link to device control structure */
  219.     struct net_device_stats dev_stat;/* device statistics */
  220.  
  221.     char brand;            /* manufacturer of the board */
  222.     long clock;            /* used clock */
  223.  
  224.     io_port ctrl;            /* I/O address of CONTROL register */
  225.     io_port    data;            /* I/O address of DATA register */
  226.     io_port special;        /* I/O address of special function port */
  227.     int irq;            /* Number of Interrupt */
  228.  
  229.     char option;
  230.     char enhanced;            /* Enhanced SCC support */
  231.  
  232.     unsigned char wreg[16];     /* Copy of last written value in WRx */
  233.     unsigned char status;        /* Copy of R0 at last external interrupt */
  234.     unsigned char dcd;        /* DCD status */
  235.  
  236.         struct scc_kiss kiss;        /* control structure for KISS params */
  237.         struct scc_stat stat;        /* statistical information */
  238.         struct scc_modem modem;     /* modem information */
  239.  
  240.         struct sk_buff_head tx_queue;    /* next tx buffer */
  241.         struct sk_buff *rx_buff;    /* pointer to frame currently received */
  242.         struct sk_buff *tx_buff;    /* pointer to frame currently transmitted */
  243.  
  244.     /* Timer */
  245.     struct timer_list tx_t;        /* tx timer for this channel */
  246.     struct timer_list tx_wdog;    /* tx watchdogs */
  247.     
  248.     /* Channel lock */
  249.     spinlock_t    lock;        /* Channel guard lock */
  250. };
  251.  
  252. #endif /* defined(__KERNEL__) */
  253. #endif /* defined(_SCC_H) */
  254.